home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / apps / xconf / ConfText.c++ < prev    next >
C/C++ Source or Header  |  1994-08-01  |  3KB  |  136 lines

  1. /*
  2.  * Copyright 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17.  
  18. // unix includes
  19. #include <stdio.h>
  20. #include <malloc.h>
  21. #include <string.h>
  22.  
  23. // conf  includes
  24. #include "ConfText.h"
  25.  
  26. #pragma linkage C
  27. #include <X11/Xatom.h>
  28. extern void _XmTextDisableRedisplay(XmTextWidget widget,
  29.                 Boolean losesbackingstore);
  30. extern void _XmTextEnableRedisplay(XmTextWidget widget);
  31. #pragma linkage
  32.  
  33. ///////////////////////////////////////////////////////////////////////////////
  34.  
  35. ConfText::ConfText(Widget text, const char *prompt)
  36. {
  37.    _text = text;
  38.    if(prompt) {
  39.       _prompt = strdup(prompt);
  40.       _promptSize = sizeof(prompt);
  41.    } else {
  42.       _prompt = strdup("");
  43.       _promptSize = 0;
  44.    }
  45.  
  46.    _buffer = (char *) malloc(MAX_BUF_SIZE);
  47.    _ignoreVerify = False;
  48.  
  49.    _lineCount = 0;
  50.  
  51.    prepTextWidget();
  52. }
  53.  
  54.  
  55. ConfText::~ConfText()
  56. {
  57.    free(_prompt);
  58.    free(_buffer);
  59. }
  60.  
  61. ///////////////////////////////////////////////////////////////////////////////
  62.  
  63. void ConfText::prepTextWidget()
  64. {
  65.    Arg args[4];  // make sure this is large enough
  66.  
  67.    int n = 0;
  68.    XtSetArg(args[n], XmNautoShowCursorPosition, False);  n++;
  69.    XtSetArg(args[n], XmNcursorPositionVisible, False);  n++;
  70.    XtSetArg(args[n], XmNverifyBell, False);  n++;
  71.    XtSetArg(args[n], XmNuserData, this);  n++;
  72.    XtSetValues(_text, args, n);
  73. }
  74.  
  75.  
  76. void ConfText::clearHistory()
  77. {
  78.    _ignoreVerify = True;
  79.    XmTextSetString(_text, "");
  80.    _ignoreVerify = False;
  81. }
  82.  
  83.  
  84. void ConfText::putStr(char *str, Boolean hilite)
  85. {
  86.    Arg args[2];  // make sure this is large enough
  87.    char buf[MAX_BUF_SIZE];
  88.  
  89.    int textwidth = strlen(str);
  90.    strcpy(buf, str);
  91.    strcat(buf, "\n");
  92.  
  93.    _ignoreVerify = True;
  94.    XmTextPosition last = XmTextGetLastPosition(_text);
  95.    XmTextInsert(_text, last, buf);
  96.    if(_promptSize > 0) {
  97.       XmTextInsert(_text, last, _prompt);
  98.       last = last + _promptSize;
  99.       XmTextInsert(_text, last, buf);
  100.    }
  101.    _ignoreVerify = False;
  102.  
  103.    XmTextSetInsertionPosition(_text, last + _promptSize + textwidth);
  104.    // scroll if nescessary
  105.    short rows;
  106.    XtSetArg(args[0], XmNrows, &rows);
  107.    XtGetValues(_text, args, 1);
  108.    short cols;
  109.    XtSetArg(args[0], XmNcolumns, &cols);
  110.    XtGetValues(_text, args, 1);
  111.    int cnt = (((textwidth - 1) / cols) + 1);
  112.    if(_lineCount < (rows - 1)) {
  113.       _lineCount = _lineCount + cnt;
  114.    }
  115.    else {
  116.       XmTextScroll(_text, cnt);
  117.    }
  118.  
  119.    if(hilite) {
  120.       XmTextPosition end = XmTextGetLastPosition(_text);
  121.       XmTextSetHighlight(_text, last, end, XmHIGHLIGHT_SELECTED);
  122.    }
  123. }
  124.  
  125.  
  126. void ConfText::putChr(char ch)
  127. {
  128.    char str[2];
  129.  
  130.    str[0] = ch;
  131.    str[1] = '\0';
  132.    putStr(str);
  133. }
  134.  
  135. ///////////////////////////////////////////////////////////////////////////////
  136.